//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//typedef long long ll;
//
//const int N = 310;
//
//int n;
//ll a[N] = { 0 };
//
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//
//	sort(a + 1, a + 1 + n);
//
//	int left = 0;
//	int right = n;
//	int flag = 0;
//	ll ret = 0;
//	while (left < right)
//	{
//		ret += (a[right] - a[left]) * (a[right] - a[left]);
//		if (flag % 2 == 0)
//			left++;
//		else
//			right--;
//
//		flag++;
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}



//#include <iostream>
//using namespace std;
//
//const int N = 1e5 + 10;
//
//int n , m;
//int a[N] = { 0 };
//
//int check(int x)
//{
//	int ret = 0;
//	int sum = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		if (a[i] > x)
//		{
//			return 1e9 + 10;
//		}
//
//		sum += a[i];
//		if (sum > x)
//		{
//			sum = a[i];
//			ret++;
//		}
//	}
//
//	return ret;
//}
//
//int main()
//{
//	cin >> n >> m;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//
//	int left = 1;
//	int right = 1e9;
//
//	while (left < right)
//	{
//		int mid = (left + right) / 2;
//		if (check(mid) <= m - 1)
//		{
//			right = mid;
//		}
//		else
//		{
//			left = mid + 1;
//		}
//	}
//
//	cout << left << endl;
//
//
//	return 0;
//}



//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//const int N = 210;
//
//int m, s, c;
//int a[N] = { 0 };
//int pos = 0;
//int cnt[N] = { 0 };
//
//bool cmp(int x, int y)
//{
//	return x > y;
//}
//
//int main()
//{
//	cin >> m >> s >> c;
//	for (int i = 1; i <= c; i++)
//	{
//		int x;
//		cin >> x;
//		a[x] = 1;
//	}
//
//	int ret = s;
//	int sum = 0;
//	int p = 0;
//	//ͷ
//	for (int i = 1; i <= s; i++)
//	{
//		if (a[i] == 0)
//		{
//			sum++;
//		}
//		else
//		{
//			ret -= sum;
//			p = i;
//			sum = 0;
//			break;
//		}
//	}
//	for (int i = p + 1; i <= s; i++)
//	{
//		if (a[i] == 0)
//		{
//			sum++;
//		}
//		else
//		{
//			if (sum != 0)
//			{
//				cnt[++pos] = sum;
//				sum = 0;
//			}
//		}
//	}
//	//β
//	ret -= sum;
//
//	//for (int i = 1; i <= s; i++)
//	//{
//	//	cout << a[i] << " ";
//	//}
//	cout << endl;
//	sort(cnt + 1, cnt + 1 + pos, cmp);
//
//	//for (int i = 1; i <= pos; i++)
//	//{
//	//	cout << cnt[i] << " ";
//	//}
//	//cout << endl;
//	
//	for (int i = 1; i < m && i <= pos; i++)
//	{
//		ret -= cnt[i];
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}


#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

typedef long long ll;

const int N = 1e5 + 10;

struct node
{
	ll num;
	ll a;
	ll t;

	bool operator<(const node& x) const
	{
		return num > x.num;
	}
}e[N];

int n;

bool cmp(node& x, node& y)
{
	return x.a == y.a ? x.num < y.num : x.a < y.a;
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> e[i].a >> e[i].t;
		e[i].num = i;
	}

	sort(e + 1, e + 1 + n, cmp);

	priority_queue<node> heap;

	ll pos = 1;
	ll end = 0;
	ll ret = 0;

	while (pos <= n || heap.size())
	{
		if (heap.size() == 0)
		{
			heap.push(e[pos]);
			end = e[pos].a;
			pos++;
		}

		auto t = heap.top();
		heap.pop();
		ret = max(ret, end - t.a);
		end += t.t;

		while (pos <= n && e[pos].a <= end)
		{
			heap.push(e[pos]);
			pos++;
		}
	}

	cout << ret << endl;

	return 0;
}